/*
 * DecompresorEstructurado.cpp
 *
 *  Created on: 16/06/2012
 *      Author: danielspacek
 */

#include "DescompresorEstructurado"

DescompresorEstructurado::DescompresorEstructurado(ibitstream *is) :
	Estructurado(&descompresor),
	descompresor(is),
	firstblock(true) {}

integer DescompresorEstructurado::descomprimir(uchar *blockOutput, integer maxSize)
{
	if(firstblock) {
		for(uchar i=0;i<USHORT_BIT;i++) {
			descompresor.procesarBit();
		}
		firstblock = false;
	}
	/*
	 * Tengo que obtener char de a uno, como salida del "descompresorBase"
	 * y cada uno que obtengo lo agrego al blockOutput
	 */
	resetearEstadisticas();
	integer size;
	uchar c;
	for(size=0;size<maxSize;size++)
	{
		try
		{
			this->contadorBytes++;
			int i,r;
			for(i=0,r=1;i<NIVELES && r==1;i++)
			{
				r = this->niveles[i]->Descomprimir(&c);
			}
			//c = niveles[0]->Descomprimir();
		}
		catch(int e)
		{
			if(e==EOF) break;
		}
		if (size == 31)
		   firstblock = false;
		blockOutput[size] = c;
		//printf("Comprimo: %d\n",c);
		//*(blockOutput + sizeof(char) * i) = c;
	}
	//printf("Termino bloque: %d\n",size);
	return size;
}


